package br.com.harley.torneio.validator;

import java.util.Date;
import java.util.List;

import javax.inject.Inject;

import org.apache.commons.lang.StringUtils;

import br.com.harley.torneio.constant.MensagemAplicacaoErro;
import br.com.harley.torneio.util.MensagemUtil;
import br.gov.frameworkdemoiselle.message.Message;
import br.gov.frameworkdemoiselle.util.ResourceBundle;

public class ValidadorGenerico {

	@Inject
	private MensagemUtil mensagemUtil;

	@Inject
	private ResourceBundle bundle;

	/**
	 * Valida o tamanho de determinado campo.
	 * 
	 * @param valorDoCampo
	 *            Valor informado para o campo.
	 * @param min
	 *            Valor mínimo permitido para o campo.
	 * @param max
	 *            Valor máximo permitido para o campo.
	 * @return Retorna 0 caso o tamanho do campo seja válido, -1 caso o tamanho
	 *         do campo seja menor do que o mínimo permitido e 1 caso o tamanho
	 *         do campo seja maior que o máximo permitido.
	 */
	public int validarTamanho(String valorDoCampo, Integer min, Integer max) {
		int retorno = 0;
		if (valorDoCampo != null) {
			if (min != null && valorDoCampo.length() < min) {
				retorno = -1;
			} else if (max != null && valorDoCampo.length() > max) {
				retorno = 1;
			}
		}
		return retorno;
	}

	/**
	 * Valida se determinado campo foi preenchido.
	 * 
	 * @param valorDoCampo
	 *            Valor informado para o campo.
	 * @return True caso o campo tenha sido preenchido e false em caso
	 *         contrário.
	 */
	public boolean foiPreenchido(Object valorDoCampo) {
		boolean retorno = true;
		if (valorDoCampo instanceof String) {
			if (StringUtils.isEmpty(valorDoCampo.toString())) {
				retorno = false;
			}
		} else {
			if (valorDoCampo == null) {
				retorno = false;
			}
		}
		return retorno;
	}

	public boolean ehPeriodoValido(Date dtInicio, Date dtFim) {
		if (!dtInicio.before(dtFim)) {
			return false;
		} else {
			return true;
		}

	}

	public void verificarPreenchimentoDoCampo(String campo, String valor, List<Message> msgs) {
		if (!foiPreenchido(valor)) {
			Message msg = mensagemUtil.buscaMensagem(MensagemAplicacaoErro.CAMPO_OBRIGATORIO, bundle.getString(campo));
			msgs.add(msg);
		}
	}

	public void validarTamanho(String campo, String valor, Integer tamMin, Integer tamMax, List<Message> msgs) {
		int tamanhoValido = validarTamanho(valor, tamMin, tamMax);
		if (tamanhoValido == -1) {
			Message msg = mensagemUtil.buscaMensagem(MensagemAplicacaoErro.CAMPO_MENOR_MINIMO, bundle.getString(campo),
					tamMin);
			msgs.add(msg);
		} else if (tamanhoValido == 1) {
			Message msg = mensagemUtil.buscaMensagem(MensagemAplicacaoErro.CAMPO_MAIOR_MAXIMO, bundle.getString(campo),
					tamMax);
			msgs.add(msg);
		}
	}

	/**
	 * Verificar se um CPF é válido.
	 * 
	 * @param cpf
	 *            CPF a ser verificado.
	 * @return Verdadeiro caso seja válido. Falso, caso contrário.
	 */
	// public boolean ehCpfValido(String cpf) {
	// cpf = Texto.manterNumeros(cpf);
	// if (cpf.length() != 11)
	// return false;
	// String numDig = cpf.substring(0, 9);
	// return
	// org.alfredlibrary.utilitarios.cpfcnpj.CPF.gerarDigitoVerificador(numDig).equals(cpf.substring(9,
	// 11));
	// }

}
